/**
 * Created by Administrator on 2017/4/18.
 */
//主要用于调用微信 JS SDK
import {callWxSign, callPaySign} from 'api/store/pay_api';
import {inviteUd} from 'store/modules/types';
import * as publicMethod from 'util/util'

import store from 'store/index';

export const appId = process.env.WX_APP_ID

let isInit = false
let xPi = 3.14159265358979324 * 3000.0 / 180.0

// 获取时间戳
const getTimestamp = () => {
  let time = new Date().getTime() + ''
  return time.substring(0, 10)
}
// parse GCJ02 => BD09 转换百度规则坐标
export const parseGcj02ToBD09 = (lat, lng) => {
  let latitude = typeof lat === 'undefined' ? '' : lat
  let longitude = typeof lng === 'undefined' ? '' : lng
  if (!latitude || !longitude) {
    return {latitude, longitude}
  }
  let z = Math.sqrt(longitude * longitude + latitude * latitude) + 0.00002 * Math.sin(latitude * xPi)
  let theta = Math.atan2(latitude, longitude) + 0.000003 * Math.cos(longitude * xPi)
  return {'latitude': z * Math.sin(theta) + 0.006, 'longitude': z * Math.cos(theta) + 0.0065}
}
// 获取随机串
const getNonceStr = () => {
  return Math.random() + ''
}

export const location = window.location

// 浏览器参数
export const params = (() => {
  let res = {}
  if (location.search) {
    const arr = location.search.substring(1).split('&')
    arr.forEach((item) => {
      let param = item.split('=')
      res[param[0]] = decodeURIComponent(param[1])
    })
  }
  return res
})()

// 初始化
export const initWx = () => {
  return new Promise((resolve, reject) => {
    if (isInit) {
      resolve()
      return
    }
    const config = {
      timestamp: getTimestamp(),
      nonceStr: getNonceStr(),
      url: location.href.split('#')[0]
    }
    // , 'onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareWeibo', 'onMenuShareQZone', 'getLocation'
    callWxSign(JSON.stringify(config)).then((data) => {
      window.wx.config({
        debug: false,
        appId,
        timestamp: config.timestamp,
        nonceStr: config.nonceStr,
        signature: data.signature,
        jsApiList: ['chooseWXPay', 'onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareWeibo', 'onMenuShareQZone']
      })
      // 注册完毕
      window.wx.ready(() => {
        isInit = true
        resolve()
      })
    }, (res) => {
      isInit = true
      resolve()
    })
  })
}

export const invokeGetLocation = () => {
  return new Promise((resolve, reject) => {
    initWx().then(() => {
      window.wx.getLocation({
        type: 'gcj02', // 默认为wgs84的gps坐标，如果要返回直接给openLocation用的火星坐标，可传入'gcj02'
        success: function(res) {
          // resolve({latitude: typeof res.latitude === 'undefined' ? '' : res.latitude,
          //   longitude: typeof res.longitude === 'undefined' ? '' : res.longitude})
          resolve(parseGcj02ToBD09(res.latitude, res.longitude))
        },
        fail: function (res) {
          // let fail = JSON.stringify(res)
          resolve({latitude: '', longitude: ''})
          // Vue.toast('获取位置信息失败1')
        },
        error(res) {
          resolve({latitude: '', longitude: ''})
          // Vue.toast('error')
          // let error = JSON.stringify(res)
          // Vue.toast('invokeGetLocation-error : ', error)
          // Vue.toast('获取位置信息失败2')
        }
      })
      window.wx.openLocation({
        latitude: 0, // 纬度，浮点数，范围为90 ~ -90
        longitude: 0, // 经度，浮点数，范围为180 ~ -180。
        name: '', // 位置名
        address: '', // 地址详情说明
        scale: 1, // 地图缩放级别,整形值,范围从1~28。默认为最大
        infoUrl: '' // 在查看位置界面底部显示的超链接,可点击跳转
      })
    })
  })
}
export const invokePay = (prepayId) => {
  return new Promise((resolve, reject) => {
    initWx().then(() => {
      let timestamp = getTimestamp()
      let nonceStr = getNonceStr()
      let packageId = `prepay_id=${prepayId}`
      let signType = 'MD5'
      let plaintext = `appId=${appId}&nonceStr=${nonceStr}&package=${packageId}&signType=${signType}&timeStamp=${timestamp}`
      callPaySign(plaintext).then((data) => {
        window.wx.chooseWXPay({
          timestamp,
          nonceStr,
          package: packageId,
          signType,
          paySign: data.signature,
          success(res) {
            if (res.errMsg === 'chooseWXPay:ok') {
              resolve(true)
            } else {
              reject(false)
            }
          },
          fail() {
            reject(false)
          },
          cancel() {
            reject(false)
          }
        })
      })
    })
  })
}

// 分享
export const initShareInfo = (title, link, imgUrl, desc, shareBizId) => {
  return new Promise((resolve, reject) => {
    initWx().then(() => {
      // 分享到朋友圈
      window.wx.onMenuShareTimeline({
        title,
        link,
        imgUrl,
        desc,
        success: function () {
          // 用户确认分享后执行的回调函数
          store.dispatch('callBackShare', link, '1', shareBizId)
        },
        cancel: function () {
          // 用户取消分享后执行的回调函数
        }
      })
      // 分享给朋友
      window.wx.onMenuShareAppMessage({
        title,
        link,
        imgUrl,
        desc,
        success: function () {
          // 用户确认分享后执行的回调函数
          store.dispatch('callBackShare', link, '2', shareBizId)
        },
        cancel: function () {
          // 用户取消分享后执行的回调函数
        }
      })
      // 分享到QQ
      window.wx.onMenuShareQQ({
        title,
        link,
        imgUrl,
        desc,
        success: () => {
          // 用户确认分享后执行的回调函数
          store.dispatch('callBackShare', link, '3', shareBizId)
        },
        cancel: () => {
          // 用户取消分享后执行的回调函数
        }
      })
      // 分享到腾讯微博
      window.wx.onMenuShareWeibo({
        title,
        link,
        imgUrl,
        desc,
        success: () => {
          // 用户确认分享后执行的回调函数
          store.dispatch('callBackShare', link, '4', shareBizId)
        },
        cancel: () => {
          // 用户取消分享后执行的回调函数
        }
      })
      // 分享到QQ空间
      window.wx.onMenuShareQZone({
        title,
        link,
        imgUrl,
        desc,
        success: () => {
          // 用户确认分享后执行的回调函数
          store.dispatch('callBackShare', link, '5', shareBizId)
        },
        cancel: () => {
          // 用户取消分享后执行的回调函数
        }
      })
    })
  })
}








